const express = require('express');
const router = express.Router();

// 实体类
const Response = require('../entity/http/Response');
const WxLogin = require('../entity/user/WxLogin');

// 业务层
const loginService = require('../service/loginService');

/**
 * @接口名称 微信用户登录
 * @用途 根据小程序请求的用户临时登录凭证code, 向微信获取用户的 openid 和 session_key 如果用户不存在则自动注册到本系统
 * @参数 { code: string, userInfo: { nickName: string, avatarUrl: string, gender: string } }
 * @参数详情 code 微信登录凭证
 * @参数详情 userInfo 微信小程序用户注册信息
 * @参数详情 userInfo.nickName 微信昵称 不超过50个字符
 * @参数详情 userInfo.avatarUrl 微信头像base编码的dataURL 不超过10MB
 * @参数详情 userInfo.gender 性别 字符串类型 限定 '男' || '女' || '未知'
 */
router.post('/wechat-login', async function(req, res, next) {
    console.log(`[log] [req-id=${req.reqId}] 进入了 /wechat-login 接口`);
    // 读取请求参数
    let wxLogin = new WxLogin(req);
    // 判断参数是否合法
    let flag = wxLogin.check();
    if (!flag.success) {
        return res.status(400).json(flag);
    }
    console.log(`[log] [req-id=${req.reqId}] 参数校验成功`);
    // 调用业务层
    loginService.wechatLogin(wxLogin).then((result) => {
        console.log(`[log] [req-id=${req.reqId}] 响应 result`, result);
        res.status(result.code).json(result);
    }).catch((err) => {
        console.log(`[log] [req-id=${req.reqId}] 服务器错误`, err);
        res.status(500).json((new Response()).fail(500, "资源不可访问"));
    });
});

module.exports = router;
